package proyectoX.src.municiones;

import java.awt.Rectangle;

import javax.swing.ImageIcon;

import proyectoX.src.aplicacion.Nivel;
import proyectoX.src.armas.Espejo;

/**
 * Espejo rectangular que hace que todas las municiones reboten en ella.
 * Mantiene un delay para saber cuándo desactivarse.
 */
public class MunicionEspejo extends MunicionX {

	protected Espejo arma;
	protected long tiempoActivacionEscudo;
	protected static final int DURACION_ESCUDO = 10000; //el tiempo de duración

	/**
	 * Crea a la munición con los datos pasados por parámetro.
	 * @param posX Posición x.
	 * @param posY Posición y.
	 * @param e Espejo que la dispara.
	 * @param nivel Nivel actual.
	 */
	public MunicionEspejo(int posX, int posY, Espejo e,Nivel nivel) {
		super(e,nivel,0);
		this.arma = e;
		ImageIcon imagen = new ImageIcon(this.getClass().getResource("/proyectoX/sprites/disparo_espejo.gif"));
		this.setIcon(imagen);
		this.setVisible(true);
		this.setSize(imagen.getIconWidth(), imagen.getIconHeight());		
		this.setLocation(posX, posY-17);
		this.tiempoActivacionEscudo = System.currentTimeMillis();
	}

	
	/**
	 * Crea una munición con los parámetros especificados.
	 * @param espejo Espejo que la crea.
	 * @param nivel Nivel actual.
	 */
	public MunicionEspejo(Espejo espejo, Nivel nivel) {
		this(0,0, espejo, nivel);
	}


	/**
	 * Pide al arma que la dispara la posición que le corresponde ahora.
	 */
	public void actualizarPosicion() {
		int[] arr = arma.obtenerNuevaPosicion();
		this.setLocation(arr[0], arr[1]);
		if (System.currentTimeMillis() - tiempoActivacionEscudo  >= DURACION_ESCUDO) {
			arma.desactivar();
		}
	}

	/**
	 * Devuelve el área de colisión de la munición. En este caso es nula porque no colisiona.
	 * @return Área de colisión.
	 */
	public Rectangle getBounds() {
		return new Rectangle(this.getX(), this.getY(), 100, 30);//ajustar con la imgen elegida
	}

	/**
	 * Pide a nivel colisionar con otras municiones pero nunca colisiona con naves
	 * por lo que siempre devuelve falso. 
	 */
	public boolean calcularColisiones() {		
		nivel.calcularColisionConMuniciones(this);
		return 	false;
	}





}
